package br.skytef.stmanager.beans;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpSession;

import br.skytef.stmanager.daos.ClienteContatoDao;
import br.skytef.stmanager.daos.MotivoSuporteDao;
import br.skytef.stmanager.daos.ParceiroDao;
import br.skytef.stmanager.daos.ProdutoClienteDao;
import br.skytef.stmanager.daos.SoftwareHouseDao;
import br.skytef.stmanager.daos.SubErroDao;
import br.skytef.stmanager.daos.TarefaDAO;
import br.skytef.stmanager.daos.UtcDAO;
import br.skytef.stmanager.entities.ClienteContatoEntity;
import br.skytef.stmanager.entities.ClienteEntity;
import br.skytef.stmanager.entities.MotivoSuporteEntity;
import br.skytef.stmanager.entities.ParceiroEntity;
import br.skytef.stmanager.entities.ProdutoClienteEntity;
import br.skytef.stmanager.entities.ProdutoEntity;
import br.skytef.stmanager.entities.SoftwareHouseEntity;
import br.skytef.stmanager.entities.SubErroEntity;
import br.skytef.stmanager.entities.TarefaEntity;
import br.skytef.stmanager.entities.UsuarioEntity;
import br.skytef.stmanager.entities.UtcEntity;
import br.skytef.stmanager.utils.Consulta;
import br.skytef.stmanager.utils.Data;


@ManagedBean(name="TarefaBean")
@SessionScoped
public class TarefaBean {
	/**
	 * Campos com seus respectivos Getters e Setters.ELementos de tela
	 */

	public TarefaEntity getTarefa() {return tarefa;}
	public void setTarefa(TarefaEntity tarefa) {this.tarefa = tarefa;}
	private TarefaEntity tarefa;

	public List<MotivoSuporteEntity> getMotivoSuporte() {return motivoSuporte;}
	public void setMotivoSuporte(List<MotivoSuporteEntity> motivoSuporte) {this.motivoSuporte = motivoSuporte;}
	private List<MotivoSuporteEntity> motivoSuporte;

	public List<SubErroEntity> getSuberro() {return suberro;}
	public void setSuberro(List<SubErroEntity> suberro) {this.suberro = suberro;}
	private List<SubErroEntity> suberro;

	public String getTextoConsulta() {return textoConsulta;}
	public void setTextoConsulta(String textoConsulta) {TarefaBean.textoConsulta = textoConsulta;}
	private static String textoConsulta;

	public static String getCadContato() {return cadContato;}
	public static void setCadContato(String cadContato) {TarefaBean.cadContato = cadContato;}
	private static String cadContato;

	public ClienteEntity getCliente() {return cliente;}
	public void setCliente(ClienteEntity cliente) {TarefaBean.cliente = cliente;}
	private static ClienteEntity cliente;

	public List<ProdutoClienteEntity> getProdCliente() {return prodCliente;}
	public void setProdCliente(List<ProdutoClienteEntity> prodCliente) {this.prodCliente = prodCliente;}
	private List<ProdutoClienteEntity> prodCliente;

	private List<ProdutoClienteEntity> prodClientes;
	
	public List<ClienteContatoEntity> getContatos() {return contatos;}
	public void setContatos(List<ClienteContatoEntity> contatos) {TarefaBean.contatos = contatos;}
	private static List <ClienteContatoEntity> contatos;

	public ProdutoEntity getProduto() {return produto;}
	public void setProduto(ProdutoEntity produto) {this.produto = produto;}
	private  ProdutoEntity produto;

	public SoftwareHouseEntity getSftHouse() {return sftHouse;}
	public void setSftHouse(SoftwareHouseEntity sftHouse) {this.sftHouse = sftHouse;}
	private SoftwareHouseEntity sftHouse;

	public ParceiroEntity getParceiro() {return parceiro;}
	public void setParceiro(ParceiroEntity parceiro) {this.parceiro = parceiro;}
	private ParceiroEntity parceiro;

	public UtcEntity getUtc() {return utc;}
	public void setUtc(UtcEntity utc) {this.utc = utc;}
	private UtcEntity utc;
	
	public String getAtendimento() {return atendimento;}
	public void setAtendimento(String atendimento) {this.atendimento = atendimento;}
	private String atendimento = "false";

	public String getError() {return error;}
	public void setError(String error) {this.error = error;}
	private String error ;

	public ClienteContatoEntity getContatoCliente() {return contatoCliente;}
	public void setContatoCliente(ClienteContatoEntity contatoCliente) {this.contatoCliente = contatoCliente;}
	private ClienteContatoEntity contatoCliente;

	public String getTeste() {return teste;}
	public void setTeste(String teste) {this.teste = teste;}
	private String teste = "false";

	public String getMotivo() {return motivo;}
	public void setMotivo(String motivo) {this.motivo = motivo;}
	private String motivo;

	public String getProtocolo() {return protocolo;}
	public void setProtocolo(String protocolo) {this.protocolo = protocolo;}
	private String protocolo;


	public String getStatus() {return status;}
	public void setStatus(String status) {this.status = status;}
	private String status;

	private Date inicioAtend, finalAtend;
	
	private int datas;
		
	private HttpSession session;
	private static UsuarioEntity usuario;
	
	public TarefaBean() {
		
		FacesContext ctx = FacesContext.getCurrentInstance();
		session = (HttpSession) ctx.getExternalContext().getSession(false);
		usuario = (UsuarioEntity)session.getAttribute("usuario");
		if(usuario == null)
			new LoginBean().encerraSessao();
		
		setTarefa(new TarefaEntity());
		setCliente(new ClienteEntity());
		tarefa.setDataInclusao(new Data().DtTime());
		long id = gerarNumTarefa();
		tarefa.setId(id);
		getListMotivoSuporteEntities();
	
		setInicioAtend(new Date(System.currentTimeMillis()));

	}

	/**
	 * M�todo para incluir registro de atendimento
	 * @param ActionEvent
	 * @throws IOException
	 */


	@SuppressWarnings("deprecation")
	private static long gerarNumTarefa(){
		Date data  = new Data().DtTime();
		String numString;
		numString =String.valueOf(data.getYear()+1900);
		numString +=String.valueOf(data.getMonth()+1);
		numString +=String.valueOf(data.getDate());		
		numString +=String.valueOf(data.getHours());
		numString +=String.valueOf(data.getMinutes());
		numString +=String.valueOf(data.getSeconds());
		numString +=String.valueOf(usuario.getId());
		return Long.parseLong(numString);

	}

	public List<MotivoSuporteEntity> getListMotivoSuporteEntities(){
		List <MotivoSuporteEntity> motivoSuporte;
		motivoSuporte = new MotivoSuporteDao().listar();
		return motivoSuporte;

	}

	public void localizar(ActionEvent actionEvent) throws IOException{
		cliente = new Consulta().cliente(textoConsulta);
	
		if (cliente != null){
			sftHouse = new SoftwareHouseDao().buscarIdCliente(cliente.getIdCliente());
			parceiro = new ParceiroDao().buscarParceiro(cliente.getIdCliente());
			getListContatoEntities();
			getListProdEntities();
			atendimento = "true"; 

		}else{
			FacesContext facesContext = FacesContext.getCurrentInstance(); 
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Cliente não encontrado", ""));
		}

	}

	public static List <ClienteContatoEntity> getListContatoEntities(){
		cliente = new Consulta().cliente(textoConsulta);
		contatos =  new ClienteContatoDao().listarContato(cliente.getIdCliente());
		return contatos;
	}

	public List <ProdutoClienteEntity> getListProdEntities(){
		prodCliente = new ProdutoClienteDao().localizarLista(cliente.getIdCliente());
		return prodCliente;
	}

	public List <SubErroEntity> getListSubErroEntities(){
		List <SubErroEntity> suberro;
		suberro = new SubErroDao().listar();
		return suberro;
	}

	public void cadContato() {
		cadContato = textoConsulta;
	}

	public void cadastrarMotivo(){
		FacesContext facesContext = FacesContext.getCurrentInstance();

		if (new MotivoSuporteDao().inserir(motivo)){
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));

		}else{
			error = MotivoSuporteDao.getErro();
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o cadastro:", error));
		}
	}

	public void	salvar(ActionEvent actionEvent) throws IOException{	
		FacesContext facesContext = FacesContext.getCurrentInstance();

		
		if(new TarefaDAO().inserir(tarefa))
			utc = new UtcEntity (tarefa.getId(),cliente.getIdCliente(),usuario.getId(),null);
		
			if(TarefaDAO.getErro() == null){
				new UtcDAO().inserirUTC(utc);
				facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));
				DashboardBean.pageProtocolo();
			
		}else{
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o cadastro:", ""));
		}
	}

	

	@SuppressWarnings("deprecation")
	public static long gerarNumOcorrencia(){
		Date data  = new Data().DtTime();

		String numString ;
		numString =String.valueOf(usuario.getId());
		numString +=String.valueOf(data.getHours());
		numString +=String.valueOf(data.getMinutes());
		numString +=String.valueOf(data.getSeconds());
		numString +=String.valueOf(cliente.getIdCliente());
		return Long.parseLong(numString);

	}

	public String limpar(){
		setTarefa(new TarefaEntity());
		setSftHouse(new SoftwareHouseEntity());
		setProduto(new ProdutoEntity());
		setCliente(new ClienteEntity());
		setTextoConsulta(null);
		setContatos(null);
		setContatoCliente(new ClienteContatoEntity());
		setAtendimento("false");
		long teste = gerarNumTarefa();
		tarefa.setId(teste);
		return null;	
	}
	
	public Date getFinalAtend() {return finalAtend;}
	public void setFinalAtend(Date finalAtend) {this.finalAtend = finalAtend;}
	
	public Date getInicioAtend() {return inicioAtend;}
	public void setInicioAtend(Date inicioAtend) {this.inicioAtend = inicioAtend;}
	
	public int getDatas() {return datas;}
	public void setDatas(int datas) {this.datas = datas;}
	
	public List<ProdutoClienteEntity> getProdClientes() {return prodClientes;}
	public void setProdClientes(List<ProdutoClienteEntity> prodClientes) {this.prodClientes = prodClientes;}
}


